package demo01;

import java.util.HashMap;
import java.util.Map;

public class HashMapExample {

    // 模拟 HashMap 内部的 hash() 方法
    static int hash(Object key) {
        int h;
        return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);
    }

    public static void main(String[] args) {
        Map<String, String> map = new HashMap<>();

        // 替换为新的名称
        map.put("linlin", "林林");
        map.put("dawei", "大伟");
        map.put("xiaoming", "小明");
        map.put("honghong", "红红");
        map.put("junhao", "俊豪");
        map.put("meihua", "梅花");
        map.put("qiangqiang", "强强");
        map.put("yanyan", "燕燕");

        // 遍历 HashMap，计算并打印每个键的哈希值和索引
        // 假设 n 是 HashMap 的当前容量，这里固定为 32
        int n = 32;

        System.out.println("HashMap 元素及其对应的哈希值和索引 (容量 = " + n + "):");
        System.out.println("--------------------------------------------------");

        for (String key : map.keySet()) {
            int calculatedHash = hash(key); // 调用模拟的 hash() 方法
            int index = (n - 1) & calculatedHash; // 计算数组索引

            // 打印 key、计算出的哈希值 和 对应的索引
            System.out.printf("%-15s 的哈希值: %12d 的索引: %2d%n", key, calculatedHash, index);
        }
    }
}